`!RNS`! (Reticulum Network Stack) is the reference implementation of `F0af`_`[Reticulum`:/page/wiki.mu`path=Reticulum_Protocol]`_`f written in Python and maintained by Mark Qvist. It is licensed under the `F0af`_`[Reticulum License ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/license.md|anchor=reticulum-license]`_`f. The Reticulum Protocol is defined by this reference implementation and `F0af`_`[the manual ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/index.md|anchor=reticulum-network-stack-manual]`_`f.`:cite-ref-1[`F5bf`_`[1`#cite-note-1]`_`f]
RNS runs on pretty much any system that can run Python 3.
>>Contents
• `F0af`_`[Installing`#installing]`_`f
• `F0af`_`[Configuration`#configuration]`_`f
• `F0af`_`[Shared instance`#shared-instance]`_`f
• `F0af`_`[Multiple instances`#multiple-instances]`_`f
• `F0af`_`[Utilities`#utilities]`_`f
• `F0af`_`[Tips and tricks`#tips-and-tricks]`_`f
• `F0af`_`[Keeping up to date`#keeping-up-to-date]`_`f
• `F0af`_`[Update RNS over Reticulum`#update-rns-over-reticulum]`_`f
• `F0af`_`[Security hardening`#security-hardening]`_`f
• `F0af`_`[See also`#see-also]`_`f
• `F0af`_`[References`#references]`_`f
• `F0af`_`[External links`#external-links]`_`f
>>Installing
See `F0af`_`[Getting Started Fast ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/gettingstartedfast.md|anchor=getting-started-fast]`_`f in the manual. Essentially, `B100`F9d9pip install rns`f`b.
Use `B100`F9d9rnsd`f`b to run RNS as a background or foreground service.
>>Configuration
Each `F0af`_`[instance`:/page/wiki.mu`path=Instance]`_`f of RNS has its own configuration directory, the default being `B100`F9d9~/.reticulum`f`b. You can specify a different configuration directory with `B100`F9d9rnsd --config=`*<config directory>`*`f`b.
On first run, a configuration file will be created in this directory (eg. `B100`F9d9~/.reticulum/config`f`b) with a basic but functional configuration. To see all options, run `B100`F9d9rnsd --exampleconfig`f`b.
>>Shared instance
By default, the first program to launch RNS will create a shared instance that other programs can use.
When a shared instance crashes, any programs connected to it will lose their connection. If you are running several programs that use RNS, starting and terminating at different times, consider running a master `B100`F9d9rnsd`f`b instance as a service for other programs to use on demand.`:cite-ref-0-2-0[`F5bf`_`[2`#cite-note-0-2]`_`f]
Instead of `B100`F9d9rnsd`f`b, you can run `B100`F9d9lxmd`f`b (`F0af`_`[LXMF`:/page/wiki.mu`path=LXMF]`_`f) or `B100`F9d9nomadnet`f`b (`F0af`_`[NomadNet`:/page/wiki.mu`path=NomadNet]`_`f) to combine their functionality:
• `B100`F9d9rnsd`f`b handles networking and contains the `F0af`_`[transport node`:/page/wiki.mu`path=Transport_node]`_`f functionality.
• `B100`F9d9lxmd`f`b handles messaging and contains the `F0af`_`[propagation node`:/page/wiki.mu`path=Propagation_node]`_`f functionality. It starts `B100`F9d9rnsd`f`b automatically on launch.
• `B100`F9d9nomadnet`f`b handles NomadNet's features including its page hosting functionality. It starts `B100`F9d9lxmd`f`b automatically on launch.
Each have their own configuration file where the functionality can be enabled/disabled.
If you `*only`* want to use a client like NomadNet or MeshChatX, you can just run that directly and it will automatically launch `B100`F9d9rnsd`f`b (if it is not already running).
>>Multiple instances
It is also possible to run multiple instaces of RNS on the same system by specifying a different configuration directory for each instance of `B100`F9d9rnsd`f`b with `B100`F9d9--config=`*<config directory>`*`f`b, or `B100`F9d9--rnsconfig=`*<config directory>`*`f`b for any of the utilities. Running multiple instances uses more memory.
>>Utilities
RNS includes a number of useful command-line utilities besides the `B100`F9d9rnsd`f`b daemon:
• `B100`F9d9`F0af`_`[rncp`:/page/wiki.mu`path=Rncp]`_`f`f`b – File transfer utility
• `B100`F9d9`F0af`_`[rngit`:/page/wiki.mu`path=Rngit]`_`f`f`b – Git repository node management
• `B100`F9d9`F0af`_`[rnid`:/page/wiki.mu`path=Rnid]`_`f`f`b – `F0af`_`[Identity`:/page/wiki.mu`path=Identity]`_`f and encryption utility
• `B100`F9d9rnir`f`b – Distributed identity resolver (WIP)
• `B100`F9d9`F0af`_`[rnodeconf`:/page/wiki.mu`path=Rnodeconf]`_`f`f`b – `F0af`_`[RNode`:/page/wiki.mu`path=RNode]`_`f configuration and firmware utility
• `B100`F9d9`F0af`_`[rnpath`:/page/wiki.mu`path=Rnpath]`_`f`f`b – `F0af`_`[Path`:/page/wiki.mu`path=Path]`_`f management utility
• `B100`F9d9rnpkg`f`b – Package manager (WIP)
• `B100`F9d9`F0af`_`[rnprobe`:/page/wiki.mu`path=Rnprobe]`_`f`f`b – Probe utility
• `B100`F9d9`F0af`_`[rnsh`:/page/wiki.mu`path=Rnsh]`_`f`f`b – Remote shell utility
• `B100`F9d9`F0af`_`[rnstatus`:/page/wiki.mu`path=Rnstatus]`_`f`f`b – Reticulum Network Stack status
• `B100`F9d9`F0af`_`[rnx`:/page/wiki.mu`path=Rnx]`_`f`f`b – Remote execution utility
>>Tips and tricks
>>>Keeping up to date
Subscribe to PyPi's RSS feed to be notified of new releases:
`B100`F9d9https://pypi.org/rss/project/rns/releases.xml`f`b
Use `B100`F9d9`F0af`_`[rngit`:/page/wiki.mu`path=Rngit]`_`f`f`b to fetch the version number of the latest release:
`B100`F9d9rngit release rns://7649a50d84610232d1416b41d2896aff/reticulum/reticulum list | tail -1 | awk '{print $NF}'`f`b
>>>Update RNS over Reticulum
Once RNS is installed, you can use `B100`F9d9`F0af`_`[rngit`:/page/wiki.mu`path=Rngit]`_`f`f`b to `F0af`_`[update RNS over Reticulum`:/page/wiki.mu`path=Rngit|anchor=install-update-python-packages]`_`f.
>>>Security hardening
Reticulum apps may be isolated by running a primary `B100`F9d9rnsd`f`b `F0af`_`[instance`:/page/wiki.mu`path=Instance]`_`f as a non-privileged user, and running each isolated app as its own user with its own `B100`F9d9rnsd`f`b instance/configuration, connected to the primary instance over a `B100`F9d9BackboneInterface`f`b.
The primary instance has a system-local `B100`F9d9BackboneInterface`f`b serving the apps' instances, and external interfaces for connecting to the wider network. Each isolated app points to the RNS configuration of its own instance (eg. `B100`F9d9rngit --rnsconfig=`*<app's rns config>`*`f`b), which in turn connects to the primary instance over a `B100`F9d9BackboneInterface`f`b.
Running `F0af`_`[multiple instances`#multiple-instances]`_`f like this uses more memory and adds an extra hop, but the performance penalty is negligible.
>>See also
• `F0af`_`[Implementations`:/page/wiki.mu`path=Implementations]`_`f
• `F0af`_`[Reticulum Protocol`:/page/wiki.mu`path=Reticulum_Protocol]`_`f
• `F0af`_`[Transport node`:/page/wiki.mu`path=Transport_node]`_`f
• `F0af`_`[NomadNet`:/page/wiki.mu`path=NomadNet]`_`f
>>References
`:cite-note-1`!1.`! `F0af`_`[↑`#cite-ref-1]`_`f `*Reference Implementation`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/whatis.md|anchor=reference-implementation] ↗`_`f
`:cite-note-0-2`!2.`! `F0af`_`[↑`#cite-ref-0-2-0]`_`f `*API Reference › Reticulum`*, Manual. `F0af`_`[`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/reference.md|anchor=RNS.Reticulum] ↗`_`f
>>External links
• `F0af`_`[API Reference ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/reference.md|anchor=api-reference]`_`f
• `F0af`_`[Code Examples ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/examples.md|anchor=code-examples]`_`f
• PyPI project
>>RNS utilities
`B100`F9d9`F0af`_`[rncp`:/page/wiki.mu`path=Rncp]`_`f`f`b • `B100`F9d9`F0af`_`[rngit`:/page/wiki.mu`path=Rngit]`_`f`f`b • `B100`F9d9`F0af`_`[rnid`:/page/wiki.mu`path=Rnid]`_`f`f`b • `B100`F9d9rnir`f`b • `B100`F9d9`F0af`_`[rnodeconf`:/page/wiki.mu`path=Rnodeconf]`_`f`f`b • `B100`F9d9`F0af`_`[rnpath`:/page/wiki.mu`path=Rnpath]`_`f`f`b • `B100`F9d9rnpkg`f`b • `B100`F9d9`F0af`_`[rnprobe`:/page/wiki.mu`path=Rnprobe]`_`f`f`b • `B100`F9d9`F0af`_`[rnsh`:/page/wiki.mu`path=Rnsh]`_`f`f`b • `B100`F9d9`F0af`_`[rnstatus`:/page/wiki.mu`path=Rnstatus]`_`f`f`b • `B100`F9d9`F0af`_`[rnx`:/page/wiki.mu`path=Rnx]`_`f`f`b
>>Reticulum Network Stack
`!Type:`! `F0af`_`[Implementation`:/page/wiki.mu`path=Category:Implementations]`_`f
`!Developer:`! Mark Qvist
`!License:`! `F0af`_`[Reticulum License ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=LICENSE]`_`f
`!Written in:`! Python
`!Platform:`! Linux, macOS, Windows, OpenBSD, Android, iOS
`!Since:`! `F0af`_`[2016-05-29 ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/commit.mu`g=reticulum|r=reticulum|ref=HEAD|h=9a9630cfd29e11ace3f12716ddb4dff0e5419b4b]`_`f
`!Repository:`! `F0af`_`[Aleph Git ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/repo.mu`g=reticulum|r=reticulum]`_`f
`!Documentation:`! `F0af`_`[Reticulum Network Stack Manual ↗`a8d24177d946de4f1f0a0fe1af9a1338:/page/blob.mu`g=reticulum|r=reticulum|ref=HEAD|path=docs/markdown/index.md|anchor=reticulum-network-stack-manual]`_`f